const express = require('express');
const multer = require('multer');
const streamifier = require('streamifier');
const fs = require("fs")
const app = express();

// 使用 multer 中间件定义文件上传的配置
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

// 调用接口直接返回文件流
app.get('/file', (req, res) => {
  // 假设我们的word文档文件就存放在这个doc目录里面
  let docxUrl = './新建 DOCX 文档.docx'

  // 允许跨域
  res.header("Access-Control-Allow-Origin", "*");
  // 设置请求头
  // 此处需根据需要返回流格式去指定请求头 -- 要返回哪种文件流就使用下面哪种Content-Type -- 切记
  res.writeHead(200, {
    // xlsx
    // 'Content-Type':"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    // docx
    'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    // pdf  
    //  'Content-Type': 'application/pdf',
  })

  // 创建可读流
  let readStream = fs.createReadStream(docxUrl)
  // 将读取的结果以管道pipe流的方式返回
  readStream.pipe(res)
})

// 上传文件/接收文件数据 -- 返回文件流
app.post('/upload', upload.single('file'), (req, res) => {
  // 允许跨域
  res.header("Access-Control-Allow-Origin", "*");
  // 通过 req.file 将文件流返回给前端
  if (req.file) {
    // 创建流
    const fileStream = streamifier.createReadStream(req.file.buffer);
    // 返回流
    fileStream.pipe(res);
  } else {
    res.status(400).send('No file was uploaded');
  }
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
